package com.atguigu.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.atguigu.common.GmallConfig;
import redis.clients.jedis.Jedis;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/*
要查phoenix的维表数据时,先读redis缓存的数据,如果rediskey,也就是 DIM:表名:phoenix里的key 不为null的话,就读取,并且重置过期时间,因为是热点数据,
如果为null的话就从phoenix查询,并且要把查询结果写到redis,并且设置过期时间为1天
 */
//查询维表数据，并将数据返回
public class DimHandler {
    public static JSONObject getDimInfo(Connection phoenixconn,String tableName,String key) throws SQLException {

        //TODO 1.先查redis数据
        Jedis jedis = JedisUtil.getJedis();
        String redisKey="DIM:"+tableName+":"+key;

        String dimInfoJson = jedis.get(redisKey);//根据redisKey获取value
        if (dimInfoJson!=null){//如果查询到结果，就将数据返回
            //todo 重置过期时间
            jedis.expire(redisKey,24*3600);//设置过期时间为24h
            jedis.close();//将jedis连接归还给连接池
            return JSON.parseObject(dimInfoJson);
        }

        //TODO 2.redis查不到的话，利用jdbc将phoenix查询结果写到redis作缓存
        String querySql="select * from "+ GmallConfig.PHOENIX_DIM_DATABASE +"."+tableName+" where id="+key;
        //"where id=xxx",集合里只有一条数据
        List<JSONObject> queryList = JdbcUtil.queryList(phoenixconn, querySql, JSONObject.class);//返回List，list里存放的类型u

        JSONObject dimInfo = queryList.get(0);//查询结果只有一条
        //将结果写到redis里
        jedis.set(redisKey,dimInfo.toJSONString());
        jedis.expire(redisKey,24*3600);
        jedis.close();

        return dimInfo;


    }


}
